/**
 * @file RPCClientPort.hpp
 * @brief 用于快速启动Client
 */

#ifndef RPC_CLIENT_PORT_H
#define RPC_CLIENT_PORT_H

#include <thrift/protocol/TBinaryProtocol.h>
#include <thrift/protocol/TProtocol.h>
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TTransport.h>
#include <thrift/transport/TTransportUtils.h>

#include <NodeClient.h>
#include <memory>

/**
 * @class RPCClientPort
 * @brief 针对NodeClient的扩展，封装了启动代码
 *
 */
class RPCClientPort : public Thrift::NodeClientClient {
private:
  std::shared_ptr<apache::thrift::transport::TTransport> socket;
  std::shared_ptr<apache::thrift::transport::TTransport> transport;
  std::shared_ptr<apache::thrift::protocol::TProtocol> protocol;

public:
  /**
   * @brief 构造函数
   *
   * @param ipaddr NodeClient地址
   * @param port NodeClient端口
   */
  RPCClientPort(const std::string &ipaddr, long port);
  /**
   * @brief 启动函数
   * @warning 请在调用其他接口前完成该接口调用
   */
  void Boot();
  /**
   * @brief 析构函数
   */
  virtual ~RPCClientPort();
};

#endif
